package effectiveJava.reflect.proxy.ProxyDecorate;

import effectiveJava.reflect.proxy.ProxyDecorate.base.*;

public class JustDecorate implements Animal{
    private Animal animal;
    private Feature feature;

    public JustDecorate(Animal _animal, Feature _feature) {
        this.animal = _animal;
        this.feature = _feature;
    }

    @Override
    public void doStuff(){
        feature.load();
        animal.doStuff();
    }

    public static void main(String[] args) {
        Animal jerry =new Rat();
        jerry =new JustDecorate(jerry,new FlyFeature());
        jerry =new JustDecorate(jerry,new DigFeature());
        /*todo 之所以先打印 dig 然后 fly， doStuff 这种效果是因为 第一次 new JustDecorate()是 jerry还是一个 Rat，但是第二次已经是一个带有(animal 为 Rat, clazz为FlyFeature)JustDecorate,生成一个(animal JustDecorate，clazz为DigFeature)JustDecorate
        * todo 在第17行调用animal.doStuff() 时实际调用的是 JustDecorate的doStuff()，其又会调用 fly以及真正的doStuff()*/
        jerry.doStuff();
    }

}
